﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common;

namespace Entidades.jSON
{
    public class ReclamoInfo
    {
        #region Constructores
        
        /// <summary>
        /// Constructor por default
        /// </summary>
        /// <param name="guion"></param>
        public ReclamoInfo()
        {
        }

        /// <summary>
        /// Construye un objeto ReclamoInfo a partir de un Reclamo
        /// </summary>
        /// <param name="reclamo"></param>
        public ReclamoInfo(Reclamo reclamo)
        {
            this.Id             = reclamo.Id;

            this.Estado         = reclamo.Estado != null ? reclamo.Estado.Nombre : string.Empty;
            this.Fecha          = reclamo.Fecha;
            this.GuionEpisodio  = reclamo.Pago != null && reclamo.Pago.Guion != null ? reclamo.Pago.Guion.Episodio : 0;
            this.GuionTitulo    = reclamo.Pago != null && reclamo.Pago.Guion != null ? reclamo.Pago.Guion.Titulo : string.Empty;
            this.IdEstado       = reclamo.Estado != null ? reclamo.Estado.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdGuion        = reclamo.Pago != null && reclamo.Pago.Guion != null ? reclamo.Pago.Guion.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdPago         = reclamo.Pago != null ? reclamo.Pago.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdUsuario      = reclamo.Pago != null && reclamo.Pago.Proveedor != null ? reclamo.Pago.Proveedor.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.Usuario        = reclamo.Pago != null && reclamo.Pago.Proveedor != null ? reclamo.Pago.Proveedor.Nombre + " " + reclamo.Pago.Proveedor.Apellido : string.Empty;
            
            this.Items = new ReclamoItemInfo[reclamo.Items.Count];
            for(var i=0; i < reclamo.Items.Count; i++)
            {
                this.Items[i] = new ReclamoItemInfo( reclamo.Items[i] );
            }
        }

        #endregion

        #region Propiedades

        private int _Id;
        /// <summary>
        /// Id (PK)
        /// </summary>
        public virtual int Id
        {
            get { return _Id; }
            set { _Id = value; }
        }

        private int _IdPago;
        /// <summary>
        /// Id del Pago
        /// </summary>
        public virtual int IdPago
        {
            get { return _IdPago; }
            set { _IdPago = value; }
        }

        private ReclamoItemInfo[] _Items;
        /// <summary>
        /// Items del Reclamo
        /// </summary>
        public virtual ReclamoItemInfo[] Items
        {
            get { return _Items; }
            set { _Items = value; }
        }

        private int _IdGuion;
        /// <summary>
        /// Id del Guión
        /// </summary>
        public virtual int IdGuion
        {
            get { return _IdGuion; }
            set { _IdGuion = value; }
        }

        private int _IdEstado;
        /// <summary>
        /// Id del Estado del Reclamo
        /// </summary>
        public virtual int IdEstado
        {
            get { return _IdEstado; }
            set { _IdEstado = value; }
        }

        private string _Estado;
        /// <summary>
        /// Estado del Reclamo
        /// </summary>
        public virtual string Estado
        {
            get { return _Estado; }
            set { _Estado = value; }
        }

        private string _GuionTitulo;
        /// <summary>
        /// Titulo del Guión
        /// </summary>
        public virtual string GuionTitulo
        {
            get { return _GuionTitulo; }
            set { _GuionTitulo = value; }
        }

        private int? _GuionEpisodio;
        /// <summary>
        /// Episodio del Guión
        /// </summary>
        public virtual int? GuionEpisodio
        {
            get { return _GuionEpisodio; }
            set { _GuionEpisodio = value; }
        }

        private DateTime _Fecha;
        /// <summary>
        /// Fecha
        /// </summary>
        public virtual DateTime Fecha
        {
            get { return _Fecha; }
            set { _Fecha = value; }
        }

        private int _IdUsuario;
        /// <summary>
        /// Id del Usuario
        /// </summary>
        public virtual int IdUsuario
        {
            get { return _IdUsuario; }
            set { _IdUsuario = value; }
        }

        private string _Usuario;
        /// <summary>
        /// Nombre y Apellido del Usuario
        /// </summary>
        public virtual string Usuario
        {
            get { return _Usuario; }
            set { _Usuario = value; }
        }

        #endregion
    }
}
